#include <iostream>
#include <vector>

using namespace std;

//class Solution {
//public:
//    int removeDuplicates(vector<int>& nums) {
//        if (nums.size() < 3) {
//            return nums.size();
//        }
//        auto a1 = nums.begin();
//        auto a2 = nums.begin() + 1;
//        auto a3 = nums.begin() + 2;
//
//        while (a3 != nums.end()) {
//            while ((a2 + 1) != nums.end() && *a1 == *a2 && *a2 == *a3) {
//                if (a3 == nums.end()) {
//                    break;
//                }
//                nums.erase(a3);
//            }
//            if ((a2 + 1) == nums.end())
//                break;
//            a1++;
//            a2++;
//            a3++;
//        }
//        return nums.size();
//    }
//};

    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n <= 2) {
            return n;
        }
        int slow = 2, fast = 2;
        while (fast < n) {
            if (nums[slow - 2] != nums[fast]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }

int main()
{
    vector<int> vv;
    vv.push_back(0);
    vv.push_back(0);
    vv.push_back(1);
    vv.push_back(1);
    vv.push_back(1);
    vv.push_back(1);
    vv.push_back(2);
    vv.push_back(3);
    vv.push_back(3);

    removeDuplicates(vv);
    return 0; 
}



class Solution {
public: int removeDuplicates(vector<int>& nums) {
    if (nums.size() < 3)
    {
        return nums.size();
    }
    int f = 0;
    for (int b = f + 2; b < nums.size(); b++) {
        if (nums[f] != nums[b]) {
            nums[f + 2] = nums[b];
            f++;
        }
    }
    return f + 2;
}
};
